package biz.datalk.industrialland.common.log.pojo.bo;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.io.Serializable;
import java.util.Date;

/**
 * 日志对象
 * @author tarofang@163.com
 * @date 2020-11-23
 */
@Document(collection="sys_log")
@Getter
@Setter
@ToString
public class LogBO implements Serializable {
    private static final long serialVersionUID = 1L;
    // 基础信息
    // ==========================================================================================
    /** 使用mongodb时使用 */
    @Id
    private String id;
    /** 日志类型 0-未知 1-登录日志 2-操作日志 {@link biz.datalk.industrialland.common.log.def.LogTypeEnum} */
    @Field("log_type")
    private Integer logType;
    /** 操作者系统ID, sys_user.id */
    @Field("opt_user_id")
    private String optUserId;
    /** 操作者账号, sys_user.username */
    @Field("opt_username")
    private String optUsername;
    /** 操作者的IP地址 */
    @Field("opt_ip")
    private String optIp;
    /** 操作实际发生时间，格式为 yyyy-MM-dd HH:mm:ss */
    @Field("opt_time")
    private String optTime;
    /** 模块编码 {@link biz.datalk.industrialland.common.log.def.ModuleEnum} */
    @Field("opt_module_code")
    private String optModuleCode;
    /** 模块名称 */
    @Field("opt_module_name")
    private String optModuleName;
    /** 分类编码 {@link biz.datalk.industrialland.common.log.def.ModuleTypeEnum}*/
    @Field("opt_type_code")
    private String optTypeCode;
    /** 分类名称 */
    @Field("opt_type_name")
    private String optTypeName;
    /** 操作编码 {@link biz.datalk.industrialland.common.log.def.OptEnum} */
    @Field("opt_code")
    private String optCode;
    /** 操作名称 */
    @Field("opt_name")
    private String optName;
    /** 操作结果, 1-成功 0-失败, 默人 0 */
    @Field("opt_result")
    private String optResult;
    /** 服务端IP地址，标准ip格式数据（目的地址，不可为空） */
    @Field("opt_server_ip")
    private String optServerIp;
    /** 客户端类型 */
    @Field("client_type")
    private String clientType;
    /** 客户端版本 */
    @Field("client_ver")
    private String clientVer;
    /** 客户端ID */
    @Field("client_id")
    private String clientId;
    /** 日志内容 */
    @Field("log_content")
    private String logContent;
    /** 消耗时间， 毫秒 */
    @Field("cost_millisecond")
    private Long costMillisecond;

    // add 2020-11-26 by tarofang@163.com S
    /** 应用标识 appkey */
    @Field("app_key")
    private String appKey;
    /** 接口调用令牌 */
    @Field("access_token")
    private String accessToken;
    // add 2020-11-26 by tarofang@163.com E

    /** 记录创建时间 */
    @Field("create_time")
    private Date createTime;

    // 附加信息
    // ==========================================================================================
    /** 请求路径 */
    @Field("req_url")
    private String reqUrl;
    /** 请求方法 GET/POST/PUT/DELETE */
    @Field("req_method")
    private String reqMethod;
    /** 请求URL参数 */
    @Field("req_url_param")
    private String reqUrlParam;
    /** 请求BODY参数 */
    @Field("req_body_param")
    private String reqBodyParam;
    /** 请求返回值 */
    @Field("req_result")
    private String reqResult;

    // add 2020-11-26 by tarofang@163.com S
    /** 开放平台请求返回值加密向量 */
    @Field("req_result_iv")
    private String reqResultIv;
    /** 开放平台请求返回值加密key */
    @Field("req_result_aes_key")
    private String reqResultAesKey;
    /** 开放平台请求返回值token */
    @Field("req_result_token")
    private String reqResultToken;
    // add 2020-11-26 by tarofang@163.com E

    /** 请求body参数解密后 */
    @Field("req_body_plaintext")
    private String reqBodyPlaintext;

    /** 过渡字段 */
    @Transient
    private String openReqResultData;
}
